package com.xgq.drink.utils;

import java.math.BigDecimal;
import java.math.RoundingMode;

public class BigDecimalUtils {

    /**
     * 两个 BigDecimal 数值相加
     * @param num1 第一个数值
     * @param num2 第二个数值
     * @return 相加后的结果
     */
    public static BigDecimal add(BigDecimal num1, BigDecimal num2) {
        if (num1 == null) {
            num1 = BigDecimal.ZERO;
        }
        if (num2 == null) {
            num2 = BigDecimal.ZERO;
        }
        return num1.add(num2);
    }

    /**
     * 两个 BigDecimal 数值相减
     * @param num1 第一个数值
     * @param num2 第二个数值
     * @return 相减后的结果
     */
    public static BigDecimal subtract(BigDecimal num1, BigDecimal num2) {
        if (num1 == null) {
            num1 = BigDecimal.ZERO;
        }
        if (num2 == null) {
            num2 = BigDecimal.ZERO;
        }
        return num1.subtract(num2);
    }

    /**
     * 两个 BigDecimal 数值相乘
     * @param num1 第一个数值
     * @param num2 第二个数值
     * @return 相乘后的结果
     */
    public static BigDecimal multiply(BigDecimal num1, BigDecimal num2) {
        if (num1 == null) {
            num1 = BigDecimal.ZERO;
        }
        if (num2 == null) {
            num2 = BigDecimal.ZERO;
        }
        return num1.multiply(num2);
    }

    /**
     * 两个 BigDecimal 数值相除
     * @param num1 第一个数值
     * @param num2 第二个数值
     * @param scale 结果的小数位数
     * @param roundingMode 四舍五入模式
     * @return 相除后的结果
     * @throws ArithmeticException 如果 num2 为 0 或者除不尽时
     */
    public static BigDecimal divide(BigDecimal num1, BigDecimal num2, int scale, RoundingMode roundingMode) {
        if (num1 == null) {
            num1 = BigDecimal.ZERO;
        }
        if (num2 == null || num2.compareTo(BigDecimal.ZERO) == 0) {
            throw new ArithmeticException("除数不能为 0");
        }
        return num1.divide(num2, scale, roundingMode);
    }
    /**
     * 比较两个 BigDecimal 数值的大小
     * @param num1 第一个数值
     * @param num2 第二个数值
     * @return 比较结果：-1（num1 < num2）、0（num1 == num2）、1（num1 > num2）
     */
    public static int compare(BigDecimal num1, BigDecimal num2) {
        if (num1 == null) {
            num1 = BigDecimal.ZERO;
        }
        if (num2 == null) {
            num2 = BigDecimal.ZERO;
        }
        return num1.compareTo(num2);
    }
    /**
     * 将订单金额转换为积分
     * @param amount 订单金额（单位：元）
     * @return 积分数量
     */
    public static int convertAmountToPoints(BigDecimal amount) {
        if (amount == null) {
            amount = BigDecimal.ZERO;
        }
        // 每 0.01 元增加 1 个积分
        return amount.multiply(new BigDecimal(100)).intValueExact();
    }
}